package com.wpen.unit.infra.repository.job.impl;

import java.io.Serializable;
import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.wpen.unit.enums.ExecStatus;
import com.wpen.unit.exception.UpdateZeroException;
import com.wpen.unit.infra.mybatis.job.mapper.AgentExec1LogMapper;
import com.wpen.unit.infra.mybatis.job.po.AgentExec1LogPo;
import com.wpen.unit.infra.mybatis.job.po.AgentExec1LogPo.AgentExec1LogColumns;
import com.wpen.unit.infra.repository.job.AgentExec1LogRepository;
import com.wpen.unit.utils.StringUtil;

/**
 * 任务执行器日志维护.
 * 
 * @author Wang Peng
 * @date 2022-12-09
 *
 */
@Repository
@Transactional
public class AgentExec1LogRepositoryImpl extends ServiceImpl<AgentExec1LogMapper, AgentExec1LogPo>
		implements AgentExec1LogRepository {

	@Override
	public List<AgentExec1LogPo> queryListByBatchLogId(List<Long> taskLogIds, String execStatus) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
		queryWrapper.in(AgentExec1LogColumns.TASK_EXEC_LOG_ID.name(), taskLogIds);
		if (StringUtil.isNotEmpty(execStatus)) {
			queryWrapper.eq(AgentExec1LogColumns.EXEC_STATUS.name(), execStatus);
		}
		queryWrapper.orderByDesc(AgentExec1LogColumns.CREATE_TIME.name());
		return getBaseMapper().selectList(queryWrapper);
	}

	@Override
	public AgentExec1LogPo queryByJobId(Long jobId, Long triggerTime) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
		queryWrapper.eq(AgentExec1LogColumns.JOB_EXEC_LOG_ID.name(), jobId);
		queryWrapper.eq(AgentExec1LogColumns.TASK_TRIGGER_TIME.name(), triggerTime);
		queryWrapper.orderByDesc(AgentExec1LogColumns.STARTUP_TIME.name());
		Page<AgentExec1LogPo> page = new Page<>(0, 1, false);
		List<AgentExec1LogPo> list = super.page(page, queryWrapper).getRecords();
		if (list != null && !list.isEmpty()) {
			return list.get(0);
		}
		return null;
	}

	@Override
	public List<AgentExec1LogPo> queryByIpv4ForScore(String ipv4) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
		queryWrapper.eq(AgentExec1LogColumns.AGENT_IPV4.name(), ipv4);
		queryWrapper.in(AgentExec1LogColumns.EXEC_STATUS.name(), ExecStatus.Running.value(), ExecStatus.Init.value());
		return getBaseMapper().selectList(queryWrapper);
	}

	@Override
	public long count(AgentExec1LogPo agentExecLogPo) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = createQuery(agentExecLogPo);
		return super.count(queryWrapper);
	}

	@Override
	public List<AgentExec1LogPo> queryList(int index, int size, AgentExec1LogPo agentExecLogPo) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = createQuery(agentExecLogPo);
		queryWrapper.orderBy(true, false, AgentExec1LogPo.AgentExec1LogColumns.STARTUP_TIME.name());
		if (size > 0) {
			Page<AgentExec1LogPo> page = new Page<>(index, size, false);
			return super.page(page, queryWrapper).getRecords();
		}
		return getBaseMapper().selectList(queryWrapper);
	}

	private QueryWrapper<AgentExec1LogPo> createQuery(AgentExec1LogPo agentExecLogPo) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
		if (agentExecLogPo.getId() != null) {
			queryWrapper.eq(AgentExec1LogColumns.ID.name(), agentExecLogPo.getId());
		}
		if (agentExecLogPo.getTaskExecLogId() != null) {
			queryWrapper.eq(AgentExec1LogColumns.TASK_EXEC_LOG_ID.name(), agentExecLogPo.getTaskExecLogId());
		}
		// if (StringUtil.isNotEmpty(agentExecLogPo.getDbCode())) {
		// queryWrapper.eq(AgentExec1LogColumns.DB_CODE.name(),
		// agentExecLogPo.getDbCode());
		// }
		if (StringUtil.isNotEmpty(agentExecLogPo.getExecDate())) {
			queryWrapper.eq(AgentExec1LogColumns.EXEC_DATE.name(), agentExecLogPo.getExecDate());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_MODE.name(), agentExecLogPo.getAppMode());
//        }
		if (StringUtil.isNotEmpty(agentExecLogPo.getAppJarName())) {
			queryWrapper.eq(AgentExec1LogColumns.APP_JAR_NAME.name(), agentExecLogPo.getAppJarName());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppRunMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_RUN_MODE.name(), agentExecLogPo.getAppRunMode());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getExecStartupCmd())) {
//            queryWrapper.eq(AgentExec1LogColumns.EXEC_STARTUP_CMD.name(), agentExecLogPo.getExecStartupCmd());
//        }
		if (StringUtil.isNotEmpty(agentExecLogPo.getExecStatus())) {
			queryWrapper.eq(AgentExec1LogColumns.EXEC_STATUS.name(), agentExecLogPo.getExecStatus());
		}
		if (StringUtil.isNotEmpty(agentExecLogPo.getAgentIpv4())) {
			queryWrapper.eq(AgentExec1LogColumns.AGENT_IPV4.name(), agentExecLogPo.getAgentIpv4());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getStartupTime())) {
//            queryWrapper.eq(AgentExec1LogColumns.STARTUP_TIME.name(), agentExecLogPo.getStartupTime());
//        }
		// if (StringUtil.isNotEmpty(agentExecLogPo.getEndTime())) {
		// queryWrapper.eq(AgentExec1LogColumns.END_TIME.name(),
		// agentExecLogPo.getEndTime());
		// }
		return queryWrapper;
	}

	@Override
	public AgentExec1LogPo queryFirst(AgentExec1LogPo agentExecLogPo) {
		QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
		if (agentExecLogPo.getId() != null) {
			queryWrapper.eq(AgentExec1LogColumns.ID.name(), agentExecLogPo.getId());
		}
		if (agentExecLogPo.getTaskExecLogId() != null) {
			queryWrapper.eq(AgentExec1LogColumns.TASK_EXEC_LOG_ID.name(), agentExecLogPo.getTaskExecLogId());
		}
		// if (StringUtil.isNotEmpty(agentExecLogPo.getDbCode())) {
		// queryWrapper.eq(AgentExec1LogColumns.DB_CODE.name(),
		// agentExecLogPo.getDbCode());
		// }
		if (StringUtil.isNotEmpty(agentExecLogPo.getExecDate())) {
			queryWrapper.eq(AgentExec1LogColumns.EXEC_DATE.name(), agentExecLogPo.getExecDate());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_MODE.name(), agentExecLogPo.getAppMode());
//        }
		if (StringUtil.isNotEmpty(agentExecLogPo.getAppJarName())) {
			queryWrapper.eq(AgentExec1LogColumns.APP_JAR_NAME.name(), agentExecLogPo.getAppJarName());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppRunMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_RUN_MODE.name(), agentExecLogPo.getAppRunMode());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getExecStartupCmd())) {
//            queryWrapper.eq(AgentExec1LogColumns.EXEC_STARTUP_CMD.name(), agentExecLogPo.getExecStartupCmd());
//        }
		if (StringUtil.isNotEmpty(agentExecLogPo.getExecStatus())) {
			queryWrapper.eq(AgentExec1LogColumns.EXEC_STATUS.name(), agentExecLogPo.getExecStatus());
		}
		if (StringUtil.isNotEmpty(agentExecLogPo.getAgentIpv4())) {
			queryWrapper.eq(AgentExec1LogColumns.AGENT_IPV4.name(), agentExecLogPo.getAgentIpv4());
		}
//        if (StringUtil.isNotEmpty(agentExecLogPo.getStartupTime())) {
//            queryWrapper.eq(AgentExec1LogColumns.STARTUP_TIME.name(), agentExecLogPo.getStartupTime());
//        }
		// if (StringUtil.isNotEmpty(agentExecLogPo.getEndTime())) {
		// queryWrapper.eq(AgentExec1LogColumns.END_TIME.name(),
		// agentExecLogPo.getEndTime());
		// }
		// queryWrapper.orderBy(true, false, AgentExecLogPoColumns.ID.name());
		return super.getOne(queryWrapper);
	}

	@Override
	public AgentExec1LogPo queryById(Serializable id) {
		return super.getById(id);
	}

	@Override
	public boolean insert(AgentExec1LogPo agentExecLogPo) {
//        agentExecLogPo.setVersion(1);
//        agentExecLogPo.setUpdateTime(new java.sql.Timestamp(System.currentTimeMillis()));
		return super.save(agentExecLogPo);
	}

	@Override
	public boolean insertBatch(List<AgentExec1LogPo> listAgentExecLogPos) {
		int rs = getBaseMapper().insertBatchSomeColumn(listAgentExecLogPos);
		return SqlHelper.retBool(rs);
	}

	@Override
	public boolean updateById(AgentExec1LogPo agentExecLogPo) {
		UpdateWrapper<AgentExec1LogPo> updateWrapper = Wrappers.update();
		updateWrapper.eq(AgentExec1LogColumns.ID.name(), agentExecLogPo.getId());
//        updateWrapper.eq(AgentExec1LogColumns.VERSION.name(), agentExecLogPo.getVersion());
//        agentExecLogPo.setVersion(agentExecLogPo.getVersion() + 1);
		boolean rs = super.update(agentExecLogPo, updateWrapper);
		// 根据ID更新所有字段，空值也更新
		// int num = getBaseMapper().alwaysUpdateSomeColumnById(BatchInfoPo);
		// boolean rs = SqlHelper.retBool(num);
		if (!rs) {
			throw new UpdateZeroException();
		}
		return rs;
	}

	@Override
	public boolean deleteByIds(Serializable[] ids) {
		UpdateWrapper<AgentExec1LogPo> updateWrapper = Wrappers.update();
		updateWrapper.in(AgentExec1LogColumns.ID.name(), (Object[]) ids);
		return super.remove(updateWrapper);
	}

//    public AgentExec1LogPo queryByExample(AgentExec1LogPo agentExecLogPo) {
//        QueryWrapper<AgentExec1LogPo> queryWrapper = Wrappers.query();
//        if (agentExecLogPo.getId() != null) {
//            queryWrapper.eq(AgentExec1LogColumns.ID.name(), agentExecLogPo.getId());
//        }
//        if (agentExecLogPo.getTaskExecLogId() != null) {
//            queryWrapper.eq(AgentExec1LogColumns.TASK_EXEC_LOG_ID.name(), agentExecLogPo.getTaskExecLogId());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getDbCode())) {
//            queryWrapper.eq(AgentExec1LogColumns.DB_CODE.name(), agentExecLogPo.getDbCode());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAzCode())) {
//            queryWrapper.eq(AgentExec1LogColumns.AZ_CODE.name(), agentExecLogPo.getAzCode());
//        }
//        if (agentExecLogPo.getExecDate() != null) {
//            queryWrapper.eq(AgentExec1LogColumns.EXEC_DATE.name(), agentExecLogPo.getExecDate());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_MODE.name(), agentExecLogPo.getAppMode());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppJarName())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_JAR_NAME.name(), agentExecLogPo.getAppJarName());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAppRunMode())) {
//            queryWrapper.eq(AgentExec1LogColumns.APP_RUN_MODE.name(), agentExecLogPo.getAppRunMode());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getExecStartupCmd())) {
//            queryWrapper.eq(AgentExec1LogColumns.EXEC_STARTUP_CMD.name(), agentExecLogPo.getExecStartupCmd());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getExecStatus())) {
//            queryWrapper.eq(AgentExec1LogColumns.EXEC_STATUS.name(), agentExecLogPo.getExecStatus());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getAgentIpv4())) {
//            queryWrapper.eq(AgentExec1LogColumns.AGENT_IPV4.name(), agentExecLogPo.getAgentIpv4());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getStartupTime())) {
//            queryWrapper.eq(AgentExec1LogColumns.STARTUP_TIME.name(), agentExecLogPo.getStartupTime());
//        }
//        if (StringUtil.isNotEmpty(agentExecLogPo.getEndTime())) {
//            queryWrapper.eq(AgentExec1LogColumns.END_TIME.name(), agentExecLogPo.getEndTime());
//        }
//		Page<AgentExec1LogPo> page = new Page<>(0, 1, false);
//		queryWrapper.orderBy(true, false, AgentExecLogPoColumns.ID.name());
//    }

}
